Sources, Talks

  • Types of Multiplayer .

    • WebServer instead of a DedicatedServer, for simple things.

      • Example: pinball game with scoreboard.

    • Ghost Data instead of Concurrent Multiplayer.

      • Ghost Data refers to just a REPLAY of a different player, requiring only 1 network transfer at the start of the level, instead of being real-time.

      • Supposedly widely used in racing games and mobile games.

      • Example: penguin game.

    • Tips to make lag less frustrating:

      • Players can walk through other players.

        • In case of lag, there will be no collision problems.

      • It doesn’t matter who kills the enemy, everyone gets credit, no need to fight over loot.

      • "Basically single-player++".

  • Interview with Pat Wyatt .

    • Very good video.

    • Talks about random network things, with little focus on Netcode.

    • Overall, it's basically an interview with someone who works on networking and the challenges in each game.

    • Worth watching from start to finish.

    • Warcraft (1994):

      • Uses Lockstep, since the game is an RTS.

      • It's said that the code was not clean; it’s a mess.

    • Diablo (1997):

      • The game was made with a different network architecture in mind, so it was messy initially.

      • Determinism is required for lockstep.

      • The game was written in Haste.

      • P2P Lockstep, Client Authority was implemented.

      • {16:25}

        • "Does the client immediately see something happening, or wait for server confirmation?"

          • Answer: "You kill on your screen and inform the Level Master that the creature died, very loose. Easy to cheat."

          • Very insecure. Client-authority.

      • "Don't do a game like this. People will cheat".

    • Starcraft (1998):

      • Same as previous games.

    • Guild Wars (2005):

      • {19:42} File serving:

        • "Downloads the game while playing."

        • Everything is cached on the drive.

        • Each file has an ID and version.

        • "delta compress the difference between the file a person has and a file a person should have".

        • TCP.

      • {36:00}

        • Everything uses TCP throughout the game.

        • The host for the game is chosen.

        • Server separation:

          • "Component isolation split it into several servers."

          • "Even if the servers run on the same machine, it's better to have separate servers for organization and crash understanding."

          • Bottlenecks are discussed, so splitting into smaller servers allows horizontal scaling by adding more machines instead of upgrading the same one.

          • Also provides uptime protection: if one machine fails, others keep the connection active.

        • Protobuf is praised.

        • The game rarely needed downtime for updates.

        • Discusses TCP vs UDP extensively.

          • UDP is good for FirstPersonShooters.

          • TCP can be problematic with errors, mobile connections, etc.

        • "The server is authoritative for important things like position and which items players have, but clients..."

        • Tips:

          • "Always code assuming 1-minute RTT (ping) to consider failure cases."

  • .

  • .